﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace Datos
{
    public class AccesoDatos
    {
        public int Insert(string Nombre, int EdadMinima, int EdadMaxima, string Descripcion, Byte[] PDFbytes)
        {
            SqlCommand _comando = MetodosDatos.CrearComandoProc();
            _comando.Parameters.AddWithValue("@nombre", Nombre);
            _comando.Parameters.AddWithValue("@edadminima", EdadMinima);
            _comando.Parameters.AddWithValue("@edadmaxima", EdadMaxima);
            _comando.Parameters.AddWithValue("@descripcion", Descripcion);
            _comando.Parameters.Add("@DatosPDF", SqlDbType.Binary).Value = PDFbytes;
            return MetodosDatos.EjecutarComandoInsert(_comando);
        }

        public static DataTable ObtenerConcurso()
        {
            SqlCommand _comando = MetodosDatos.CrearComando();
            _comando.CommandText = "SELECT * FROM Concurso";
            return MetodosDatos.EjecutarComandoSelect(_comando);
        }

        public static DataTable ObtenerArchivo()
        {
            SqlCommand _comando = MetodosDatos.CrearComando();
            _comando.CommandText = "SELECT * FROM ArchivoTexto";
            return MetodosDatos.EjecutarComandoSelect(_comando);
        }

        public static DataTable ObtenerTipoTexto()
        {
            SqlCommand _comando = MetodosDatos.CrearComando();
            _comando.CommandText = "SELECT * FROM TipoTexto";
            return MetodosDatos.EjecutarComandoSelect(_comando);
        }

        public int Borrar(int ConcursoId)
        {
            SqlCommand _comando = MetodosDatos.CrearComando();
            _comando.Parameters.AddWithValue("@id", ConcursoId);
            _comando.CommandText = "DELETE FROM Concurso WHERE ConcursoId=@id";
            return MetodosDatos.EjecutarComandoDelete(_comando);
        }

        public int BorrarArchivo(int ArchivoTextoId)
        {
            SqlCommand _comando = MetodosDatos.CrearComando();
            _comando.Parameters.AddWithValue("@id", ArchivoTextoId);
            _comando.CommandText = "DELETE FROM ArchivoTexto WHERE ArchivoTextoId=@id";
            return MetodosDatos.EjecutarComandoDelete(_comando);
        }

        public int Modificar(int ConcursoId, string Nombre, int EdadMinima, int EdadMaxima, string Descripcion, Byte[] PDFbytes)
        {
            SqlCommand _comando = MetodosDatos.CrearComandoMod();
            _comando.Parameters.AddWithValue("@Id", ConcursoId);
            _comando.Parameters.AddWithValue("@Nombre", Nombre);
            _comando.Parameters.AddWithValue("@EdadMin", EdadMinima);
            _comando.Parameters.AddWithValue("@EdadMax", EdadMaxima);
            _comando.Parameters.AddWithValue("@Descripcion", Descripcion);
            _comando.Parameters.Add("@DatosPDF", SqlDbType.Binary).Value = PDFbytes;
            return MetodosDatos.EjecutarComandoUpdate(_comando);
        }

        public static Boolean insertPDF(string nombrePDF, Byte[] PDFbytes)
        {
            SqlCommand _comando = MetodosDatos.CrearComando();
            _comando.CommandText = "INSERT INTO ArchivoTexto (Nombre, Tipo, Datos) " +" VALUES (@NombrePDF,@TipoPDF,@DatosPDF)";
            _comando.Parameters.Add("@NombrePDF", SqlDbType.VarChar).Value = nombrePDF;
            _comando.Parameters.Add("@TipoPDF", SqlDbType.VarChar).Value = "application/pdf";
            _comando.Parameters.Add("@DatosPDF", SqlDbType.Binary).Value = PDFbytes;
            return MetodosDatos.ejecutarInsert(_comando);
        }

        public static DataTable selectPDF(int id)
        {
            SqlCommand _comando = MetodosDatos.CrearComando();
            _comando.CommandText = "SELECT Nombre, Tipo, Datos FROM ArchivoTexto WHERE ArchivoTextoId =" + id;
            return MetodosDatos.ejecutarSelect(_comando);
        }

        public int InsertArchivoTexto(string Titulo, int TipoTextoId, string Nombre, string Tipo, Byte[] Datos,
            int UsuarioId,string Descripcion,int EdadDesde,int EdadHasta, bool Anonimo,bool Contacto)
        {
            SqlCommand _comando = MetodosDatos.CrearComandoInsArchivoTexto();
            _comando.Parameters.AddWithValue("@Titulo", Titulo);
            _comando.Parameters.AddWithValue("@TipoTextoId", TipoTextoId);
            _comando.Parameters.AddWithValue("@Nombre", Nombre);
            _comando.Parameters.AddWithValue("@Tipo", Tipo);
            _comando.Parameters.Add("@Datos", SqlDbType.Binary).Value = Datos;
            _comando.Parameters.AddWithValue("@UsuarioId", UsuarioId);
            _comando.Parameters.AddWithValue("@Descripcion", Descripcion);
            _comando.Parameters.AddWithValue("@EdadDesde", EdadDesde);
            _comando.Parameters.AddWithValue("@EdadHasta", EdadHasta);
            _comando.Parameters.AddWithValue("@Anonimo", Anonimo);
            _comando.Parameters.AddWithValue("@Contacto", Contacto);
            return MetodosDatos.EjecutarComandoInsert(_comando);
        }

        public int UpdateArchivoTexto(int ArchivoTextoId, string Titulo, int TipoTextoId, string Nombre, string Tipo, Byte[] Datos,
            int UsuarioId, string Descripcion, int EdadDesde, int EdadHasta, bool Anonimo, bool Contacto)
        {
            SqlCommand _comando = MetodosDatos.CrearComandoModArchivo();
            _comando.Parameters.AddWithValue("@ArchivoTextoId", ArchivoTextoId);
            _comando.Parameters.AddWithValue("@Titulo", Titulo);
            _comando.Parameters.AddWithValue("@TipoTextoId", TipoTextoId);
            _comando.Parameters.AddWithValue("@Nombre", Nombre);
            _comando.Parameters.AddWithValue("@Tipo", Tipo);
            _comando.Parameters.Add("@Datos", SqlDbType.Binary).Value = Datos;
            _comando.Parameters.AddWithValue("@UsuarioId", UsuarioId);
            _comando.Parameters.AddWithValue("@Descripcion", Descripcion);
            _comando.Parameters.AddWithValue("@EdadDesde", EdadDesde);
            _comando.Parameters.AddWithValue("@EdadHasta", EdadHasta);
            _comando.Parameters.AddWithValue("@Anonimo", Anonimo);
            _comando.Parameters.AddWithValue("@Contacto", Contacto);
            return MetodosDatos.EjecutarComandoUpdate(_comando);
        }

        public int UpdateArchivoTexto2(int ArchivoTextoId, string Titulo, int TipoTextoId, 
            int UsuarioId, string Descripcion, int EdadDesde, int EdadHasta, bool Anonimo, bool Contacto)
        {
            SqlCommand _comando = MetodosDatos.CrearComandoModArchivo2();
            _comando.Parameters.AddWithValue("@ArchivoTextoId", ArchivoTextoId);
            _comando.Parameters.AddWithValue("@Titulo", Titulo);
            _comando.Parameters.AddWithValue("@TipoTextoId", TipoTextoId);
            _comando.Parameters.AddWithValue("@UsuarioId", UsuarioId);
            _comando.Parameters.AddWithValue("@Descripcion", Descripcion);
            _comando.Parameters.AddWithValue("@EdadDesde", EdadDesde);
            _comando.Parameters.AddWithValue("@EdadHasta", EdadHasta);
            _comando.Parameters.AddWithValue("@Anonimo", Anonimo);
            _comando.Parameters.AddWithValue("@Contacto", Contacto);
            return MetodosDatos.EjecutarComandoUpdate(_comando);
        }

        public int InsertarInt(string NombreTabla, string NombreCampo, int Dato)
        {
            string CadenaComando = "INSERT INTO " + NombreTabla + " (" + NombreCampo + "Id) VALUES (@Dato)";
            SqlCommand _comando = MetodosDatosDao.CrearComando();
            _comando.Parameters.AddWithValue("@Dato", Dato);
            _comando.CommandText = CadenaComando;
            return MetodosDatosDao.EjecutarComando(_comando);
        }

        public int InsertarString(string NombreTabla, string NombreCampo, string Dato)
        {
            string CadenaComando = "INSERT INTO " + NombreTabla + " (" + NombreCampo + "Id) VALUES (@Dato)";
            SqlCommand _comando = MetodosDatosDao.CrearComando();
            _comando.Parameters.AddWithValue("@Dato", Dato);
            _comando.CommandText = CadenaComando;
            return MetodosDatosDao.EjecutarComando(_comando);
        }

        public int InsertarBool(string NombreTabla, string NombreCampo, bool Dato)
        {
            string CadenaComando = "INSERT INTO " + NombreTabla + " (" + NombreCampo + "Id) VALUES (@Dato)";
            SqlCommand _comando = MetodosDatosDao.CrearComando();
            _comando.Parameters.AddWithValue("@Dato", Dato);
            _comando.CommandText = CadenaComando;
            return MetodosDatosDao.EjecutarComando(_comando);
        }

        public int InsertarDatos(string NombreTabla, string NombreCampo, Byte[] Dato)
        {
            string CadenaComando = "INSERT INTO " + NombreTabla + " (" + NombreCampo + "Id) VALUES (@Dato)";
            SqlCommand _comando = MetodosDatosDao.CrearComando();
            _comando.Parameters.AddWithValue("@Dato", Dato);
            _comando.CommandText = CadenaComando;
            return MetodosDatosDao.EjecutarComando(_comando);
        }

        public int ModificarInt(string NombreTabla, string NombreCampo, int Dato, int Id)
        {
            string CadenaComando = "UPDATE " + NombreTabla + " SET " + NombreCampo + "=@" + Dato + " WHERE " + NombreTabla + "Id=" + Id.ToString();
            SqlCommand _comando = MetodosDatosDao.CrearComando();
            _comando.Parameters.AddWithValue("@Dato", Dato);
            _comando.CommandText = CadenaComando;
            return MetodosDatosDao.EjecutarComando(_comando);
        }

        public int ModificarString(string NombreTabla, string NombreCampo, string Dato, int Id)
        {
            string CadenaComando = "UPDATE " + NombreTabla + " SET " + NombreCampo + "=@" + Dato + " WHERE " + NombreTabla + "Id=" + Id.ToString();
            SqlCommand _comando = MetodosDatosDao.CrearComando();
            _comando.Parameters.AddWithValue("@Dato", Dato);
            _comando.CommandText = CadenaComando;
            return MetodosDatosDao.EjecutarComando(_comando);
        }

        public int ModificarBool(string NombreTabla, string NombreCampo, bool Dato, int Id)
        {
            string CadenaComando = "UPDATE " + NombreTabla + " SET " + NombreCampo + "=@" + Dato + " WHERE " + NombreTabla + "Id=" + Id.ToString();
            SqlCommand _comando = MetodosDatosDao.CrearComando();
            _comando.Parameters.AddWithValue("@Dato", Dato);
            _comando.CommandText = CadenaComando;
            return MetodosDatosDao.EjecutarComando(_comando);
        }

        public int ModificarDatos(string NombreTabla, string NombreCampo, Byte[] Dato, int Id)
        {
            string CadenaComando = "UPDATE " + NombreTabla + " SET " + NombreCampo + "=@" + Dato + " WHERE " + NombreTabla + "Id=" + Id.ToString();
            SqlCommand _comando = MetodosDatosDao.CrearComando();
            _comando.Parameters.AddWithValue("@Dato", Dato);
            _comando.CommandText = CadenaComando;
            return MetodosDatosDao.EjecutarComando(_comando);
        }

        public static DataTable SeleccionarTabla(string NombreTabla)
        {
            SqlCommand _comando = MetodosDatos.CrearComando();
            _comando.CommandText = "SELECT * FROM " + NombreTabla;
            return MetodosDatosDao.EjecutarComandoSelect(_comando);
        }
    }
}
